Passed
Pull Request — filestream (#169)
by
unknown
04:52
created

util-file.ts ➔ getNextBufferSubarraySync   A

Complexity

Conditions 1

Size

Total Lines 10
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 10
rs 9.95
c 0
b 0
f 0
cc 1
1
import * as fs from 'fs'
2
import { promisify } from 'util'
3
4
export const fsOpenPromise = promisify(fs.open)
5
export const fsReadPromise = promisify(fs.read)
6
export const fsClosePromise = promisify(fs.close)
7
export const fsWritePromise = promisify(fs.write)
8
export const fsUnlinkPromise = promisify(fs.unlink)
9
export const fsRenamePromise = promisify(fs.rename)
10
11
export function processFileSync<T>(
12
    filepath: string,
13
    flags: string,
14
    process: (fileDescriptor: number) => T
15
) {
16
    const fileDescriptor = fs.openSync(filepath, flags)
17
    try {
18
        return process(fileDescriptor)
19
    }
20
    finally {
21
        fs.closeSync(fileDescriptor)
22
    }
23
}
24
25
export async function processFileAsync<T>(
26
    filepath: string,
27
    flags: string,
28
    process: (fileDescriptor: number) => Promise<T>
29
): Promise<T> {
30
    const fileDescriptor = await fsOpenPromise(filepath, flags)
31
    try {
32
        return await process(fileDescriptor)
33
    }
34
    finally {
35
        await fsClosePromise(fileDescriptor)
36
    }
37
}
38
39
export function fillBufferSync(
40
    fileDescriptor: number,
41
    buffer: Buffer,
42
    offset = 0
43
): Buffer {
44
    const bytesRead = fs.readSync(
45
        fileDescriptor,
46
        buffer,
47
        offset,
48
        buffer.length - offset,
49
        null
50
    )
51
    return buffer.subarray(0, bytesRead + offset)
52
}
53
54
export async function fillBufferAsync(
55
    fileDescriptor: number,
56
    buffer: Buffer,
57
    offset = 0
58
): Promise<Buffer> {
59
    const bytesRead = (await fsReadPromise(
60
        fileDescriptor,
61
        buffer,
62
        offset,
63
        buffer.length - offset,
64
        null
65
    )).bytesRead
66
    return buffer.subarray(0, bytesRead + offset)
67
}